package com.dbh.company.buildbook;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

import java.io.IOException;
import java.util.*;

/**
 * @author dongbanghui
 * @create 2023/12/11
 */
public class Offline {

    private static final String EXPORT_ORIGIN_API_URL = "http://preview-backend.mr.ke.com/v1/projects/point/query";
    private static final String OFFLINE_API_URL = "http://preview-backend.mr.ke.com/v1/projects/point/offline";

    /**
     * 从链接中提取ID（#/后面的数字）
     */
    private static String extractIdFromUrl(String url) {
        if (url == null || url.isEmpty()) {
            return null;
        }
        // 查找 #/ 后面的数字，直到遇到 ? 或 #
        int startIndex = url.indexOf("#/");
        if (startIndex == -1) {
            return null;
        }
        startIndex += 2; // 跳过 "#/"
        int endIndex = url.length();
        // 查找第一个 ? 或 # 或字符串结束
        for (int i = startIndex; i < url.length(); i++) {
            char c = url.charAt(i);
            if (c == '?' || c == '#') {
                endIndex = i;
                break;
            }
        }
        return url.substring(startIndex, endIndex);
    }

    /**
     * 获取需要检查的链接ID列表
     */
    private static Set<String> getExpectedIds() {
        Set<String> expectedIds = new LinkedHashSet<>();
        
        // 第一组链接（省委之前的）
        String[] urls1 = {
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/582679?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/582681?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/532459?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/536210?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/540974?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/582678?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/536209?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/574482?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765269871255468801#/574488?share=12"
        };
        
        // 省委链接
        String[] urls2 = {
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/574492?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/565929?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/580586?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/580591?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/580590?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/568443?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/570104?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/553126?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/531871?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765301329022237441#/582356?share=1"
        };
        
        // 省政府链接
        String[] urls3 = {
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765324702485920513#/580209?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765324702485920513#/580215?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765324702485920513#/580214?share=1",
            "https://mr.ke.com/3dmvp/?duid=DU84w7sSMpD25DZrA26TOtUWMdIDQA4BBJ96RFU4NHc3c1NNcEQyNURackEyNlRPdFVXTWRJRFFBNEJCSjk2c2h1&parentSceneId=1765324702485920513#/580213?share=1"
        };
        
        // 提取所有ID
        for (String url : urls1) {
            String id = extractIdFromUrl(url);
            if (id != null) {
                expectedIds.add(id);
            }
        }
        for (String url : urls2) {
            String id = extractIdFromUrl(url);
            if (id != null) {
                expectedIds.add(id);
            }
        }
        for (String url : urls3) {
            String id = extractIdFromUrl(url);
            if (id != null) {
                expectedIds.add(id);
            }
        }
        
        return expectedIds;
    }

    /**
     * 截断Excel sheet名称（Excel sheet名称最多31个字符）
     */
    private static String truncateSheetName(String name) {
        if (name == null) {
            return "Sheet";
        }
        // Excel sheet名称限制为31个字符
        if (name.length() > 31) {
            return name.substring(0, 31);
        }
        return name;
    }

    /**
     * 将项目状态数字转换为文字描述
     */
    private static String getStatusDesc(Object status) {
        if (status == null) {
            return "";
        }
        
        Integer statusCode = null;
        if (status instanceof Integer) {
            statusCode = (Integer) status;
        } else if (status instanceof String) {
            try {
                statusCode = Integer.parseInt((String) status);
            } catch (NumberFormatException e) {
                return status.toString();
            }
        } else {
            try {
                statusCode = Integer.parseInt(status.toString());
            } catch (NumberFormatException e) {
                return status.toString();
            }
        }
        
        // 根据状态码返回对应的文字描述
        switch (statusCode) {
            case 0:
                return "资料已上传";
            case 5:
                return "模型生成中";
            case 6:
                return "模型生成失败";
            case 10:
                return "全景图已上传";
            case 11:
                return "日照分析完成";
            case 12:
                return "日照分析失败";
            case 13:
                return "日照分析中";
            case 20:
                return "h5已上线";
            case 30:
                return "app已上线";
            case 40:
                return "待更新";
            case 50:
                return "审核中";
            case 51:
                return "标注中";
            case 60:
                return "审核未通过";
            case 70:
                return "下线";
            default:
                return statusCode.toString();
        }
    }



    /**
     * 导出下线项目Excel
     * 包含：城市、小区id、小区名称、坐标、项目状态、下线时间
     */
    private static void exportOfflineProjects() throws IOException {
        List<Map<String, Object>> paramList = getParamList();
        
        // Sheet名称列表（按顺序对应每个坐标点）
        List<String> sheetNames = getSheetNameList();
        
        // 检查sheet名称数量是否匹配
        if (sheetNames.size() != paramList.size()) {
            System.out.println("警告：Sheet名称数量(" + sheetNames.size() + ")与坐标点数量(" + paramList.size() + ")不匹配！");
        }
        
        // 创建Excel写入器
        ExcelWriter writer = ExcelUtil.getBigWriter("D:\\data\\offline_projects_export.xlsx");
        
        // 用于收集所有数据的列表（用于总览sheet）
        List<JSONObject> allDataList = new ArrayList<>();
        
        // 第一步：先收集所有数据
        System.out.println("第一步：收集所有数据...");
        for (int i = 0; i < paramList.size(); i++) {
            Map<String, Object> params = paramList.get(i);
            
            // 调用接口
            String response = HttpRequest.post(EXPORT_ORIGIN_API_URL)
                    .header("Content-Type", "application/json")
                    .cookie("mr_backend_login_user=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uSWQiOiIyLjAwMTI0NzRlZDU4N2Q2YWFmODAzZWVmMDY3NzNiYzQ1ZjgifQ.1JXw8Ufcc0P1KfkAAvBjzrac6iAVH_nU9ie32jv3WIw")
                    .body(JSONUtil.toJsonStr(params))
                    .execute()
                    .body();
            
            System.out.println("请求参数 " + (i + 1) + " (坐标: " + params.get("point") + ") 开始处理...");
            
            // 解析响应
            JSONObject jsonObject = JSONUtil.parseObj(response);
            Integer code = jsonObject.getInt("code");
            
            if (code != null && code == 0) {
                JSONArray dataArray = jsonObject.getJSONArray("data");
                if (dataArray != null && !dataArray.isEmpty()) {
                    // 收集数据用于总览sheet
                    int count = 0;
                    for (Object item : dataArray) {
                        JSONObject itemObj = JSONUtil.parseObj(item);
                        Object status = itemObj.get("status");
                        if (Convert.toInt(status) != 70) {
                            continue;
                        }
                        Object mtime = itemObj.get("updateTime");
                        Date date = Convert.toDate(mtime);
                        boolean in = DateUtil.isIn(date, DateUtil.parse("2025-11-01 15:00:00"),
                                DateUtil.parse("2025-11-01 16:00:00"));
                        if (!in) {
                            continue;
                        }
                        count++;
                        allDataList.add(itemObj);
                    }
                    System.out.println("  收集到 " + count + " 条数据");
                } else {
                    System.out.println("  无数据");
                }
            } else {
                String msg = jsonObject.getStr("msg");
                System.out.println("请求参数 " + (i + 1) + " 失败: " + msg);
            }
        }
        
        // 第二步：创建总览sheet（作为第一个sheet）
        System.out.println("\n第二步：创建总览sheet...");
        createOfflineSummarySheet(writer, allDataList);
        
        // 第三步：创建各个单独的sheet
        System.out.println("\n第三步：创建各个单独的sheet...");
        for (int i = 0; i < paramList.size(); i++) {
            Map<String, Object> params = paramList.get(i);
            
            // 调用接口
            String response = HttpRequest.post(EXPORT_ORIGIN_API_URL)
                    .header("Content-Type", "application/json")
                    .cookie("mr_backend_login_user=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uSWQiOiIyLjAwMTI0NzRlZDU4N2Q2YWFmODAzZWVmMDY3NzNiYzQ1ZjgifQ.1JXw8Ufcc0P1KfkAAvBjzrac6iAVH_nU9ie32jv3WIw")
                    .body(JSONUtil.toJsonStr(params))
                    .execute()
                    .body();
            
            System.out.println("请求参数 " + (i + 1) + " (坐标: " + params.get("point") + ") 开始处理...");
            
            // 解析响应
            JSONObject jsonObject = JSONUtil.parseObj(response);
            Integer code = jsonObject.getInt("code");
            
            if (code != null && code == 0) {
                JSONArray dataArray = jsonObject.getJSONArray("data");
                
                // 获取对应的sheet名称，如果超出范围则使用默认名称
                String sheetName;
                if (i < sheetNames.size()) {
                    sheetName = truncateSheetName(sheetNames.get(i));
                } else {
                    sheetName = "Sheet" + (i + 1);
                }
                
                if (dataArray != null && !dataArray.isEmpty()) {
                    // 创建新的sheet
                    writer.setSheet(sheetName);
                    
                    // 设置列宽
                    writer.setColumnWidth(0, 15);  // 城市
                    writer.setColumnWidth(1, 20);  // 小区id
                    writer.setColumnWidth(2, 30);  // 小区名称
                    writer.setColumnWidth(3, 35);  // 坐标
                    writer.setColumnWidth(4, 15);  // 项目状态
                    writer.setColumnWidth(5, 20);  // 下线时间
                    
                    // 设置表头
                    List<String> headList = new ArrayList<>();
                    headList.add("城市");
                    headList.add("小区id");
                    headList.add("小区名称");
                    headList.add("坐标");
                    headList.add("项目状态");
                    headList.add("下线时间");
                    writer.writeSecHeadRow(headList);
                    
                    // 写入数据
                    List<List<Object>> rowList = new ArrayList<>();
                    for (Object item : dataArray) {
                        JSONObject itemObj = JSONUtil.parseObj(item);
                        List<Object> cellList = new ArrayList<>();
                        
                        // 城市
                        cellList.add(itemObj.get("cityName"));
                        
                        // 小区id
                        cellList.add(itemObj.get("resblockId"));
                        
                        // 小区名称
                        cellList.add(itemObj.get("name"));
                        
                        // 坐标
                        cellList.add(itemObj.get("resblockLocation"));
                        
                        // 项目状态（status转为文字描述）
                        Object status = itemObj.get("status");
                        String statusStr = getStatusDesc(status);
                        if (Convert.toInt(status) != 70) {
                            continue;
                        }
                        cellList.add(statusStr);

                        Object mtime = itemObj.get("updateTime");
                        Date date = Convert.toDate(mtime);
                        boolean in = DateUtil.isIn(date, DateUtil.parse("2025-11-01 15:00:00"),
                                DateUtil.parse("2025-11-01 16:00:00"));
                        if (!in) {
                            continue;
                        }
                        
                        // 下线时间（updateTime）
                        cellList.add(itemObj.get("updateTime"));
                        
                        rowList.add(cellList);
                    }
                    writer.write(rowList, true);
                    
                    System.out.println("Sheet [" + sheetName + "] 写入 " + dataArray.size() + " 条数据");
                } else {
                    System.out.println("Sheet [" + sheetName + "] 无数据");
                }
            } else {
                String msg = jsonObject.getStr("msg");
                System.out.println("请求参数 " + (i + 1) + " 失败: " + msg);
            }
        }
        
        // 关闭写入器
        writer.close();
        System.out.println("\n下线项目Excel导出完成！");
        System.out.println("文件路径: D:\\data\\offline_projects_export.xlsx");
    }
    
    /**
     * 创建下线项目总览sheet，汇总所有去重后的数据（作为第一个sheet）
     */
    private static void createOfflineSummarySheet(ExcelWriter writer, List<JSONObject> allDataList) {
        System.out.println("开始创建总览sheet，原始数据量: " + allDataList.size());
        
        // 根据resblockId去重
        Map<String, JSONObject> uniqueDataMap = new LinkedHashMap<>();
        for (JSONObject item : allDataList) {
            Object resblockId = item.get("resblockId");
            if (resblockId != null) {
                String key = resblockId.toString();
                // 如果不存在则添加，保留第一次出现的记录
                if (!uniqueDataMap.containsKey(key)) {
                    uniqueDataMap.put(key, item);
                }
            }
        }
        
        System.out.println("去重后数据量: " + uniqueDataMap.size());
        
        // 创建总览sheet（第一个sheet会自动创建，这里重命名为"总览"）
        writer.renameSheet("总览");
        
        // 设置列宽
        writer.setColumnWidth(0, 15);  // 城市
        writer.setColumnWidth(1, 20);  // 小区id
        writer.setColumnWidth(2, 30);  // 小区名称
        writer.setColumnWidth(3, 35);  // 坐标
        writer.setColumnWidth(4, 15);  // 项目状态
        writer.setColumnWidth(5, 20);  // 下线时间
        
        // 设置表头
        List<String> headList = new ArrayList<>();
        headList.add("城市");
        headList.add("小区id");
        headList.add("小区名称");
        headList.add("坐标");
        headList.add("项目状态");
        headList.add("下线时间");
        writer.writeSecHeadRow(headList);
        
        // 写入去重后的数据
        List<List<Object>> rowList = new ArrayList<>();
        for (JSONObject itemObj : uniqueDataMap.values()) {
            List<Object> cellList = new ArrayList<>();
            
            // 城市
            cellList.add(itemObj.get("cityName"));
            
            // 小区id
            cellList.add(itemObj.get("resblockId"));
            
            // 小区名称
            cellList.add(itemObj.get("name"));
            
            // 坐标
            cellList.add(itemObj.get("resblockLocation"));
            
            // 项目状态（status转为文本）
            Object status = itemObj.get("status");
            String statusStr = getStatusDesc(status);
            cellList.add(statusStr);


            // 下线时间（updateTime）
            cellList.add(itemObj.get("updateTime"));
            
            rowList.add(cellList);
        }
        writer.write(rowList, true);
        
        System.out.println("总览sheet写入完成，共 " + uniqueDataMap.size() + " 条去重后的数据");
    }

    private static void offline() {
        List<Map<String, Object>> paramList = getParamList();
        for (Map<String, Object> params : paramList) {
            String response = HttpRequest.post(OFFLINE_API_URL)
                    .header("Content-Type", "application/json")
                    .cookie("mr_backend_login_user=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uSWQiOiIyLjAwMTI0NzRlZDU4N2Q2YWFmODAzZWVmMDY3NzNiYzQ1ZjgifQ.1JXw8Ufcc0P1KfkAAvBjzrac6iAVH_nU9ie32jv3WIw")
                    .body(JSONUtil.toJsonStr(params))
                    .execute()
                    .body();
            System.out.println("请求参数: " + JSONUtil.toJsonStr(params));
            System.out.println("响应结果: " + response);
        }
    }


    private static void exportOriginResblock() {
        List<Map<String, Object>> paramList = getParamList();

        // Sheet名称列表（按顺序对应每个坐标点）
        List<String> sheetNames = getSheetNameList();

        // 检查sheet名称数量是否匹配
        if (sheetNames.size() != paramList.size()) {
            System.out.println("警告：Sheet名称数量(" + sheetNames.size() + ")与坐标点数量(" + paramList.size() + ")不匹配！");
        }

        // 创建Excel写入器
        ExcelWriter writer = ExcelUtil.getBigWriter("D:\\data\\projects_export.xlsx");

        // 用于收集所有数据的列表（用于总览sheet）
        List<JSONObject> allDataList = new ArrayList<>();
        
        // 获取需要检查的ID列表
        Set<String> expectedIds = getExpectedIds();
        System.out.println("需要检查的链接ID数量: " + expectedIds.size());
        System.out.println("需要检查的ID列表: " + expectedIds);
        System.out.println();
        
        // 用于收集实际返回的所有ID
        Set<String> actualIds = new HashSet<>();

        // 第一步：先收集所有数据
        System.out.println("第一步：收集所有数据...");
        for (int i = 0; i < paramList.size(); i++) {
            Map<String, Object> params = paramList.get(i);

            // 调用接口
            String response = HttpRequest.post(EXPORT_ORIGIN_API_URL)
                    .header("Content-Type", "application/json")
                    .cookie("mr_backend_login_user=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uSWQiOiIyLjAwMTI0NzRlZDU4N2Q2YWFmODAzZWVmMDY3NzNiYzQ1ZjgifQ.1JXw8Ufcc0P1KfkAAvBjzrac6iAVH_nU9ie32jv3WIw")
                    .body(JSONUtil.toJsonStr(params))
                    .execute()
                    .body();

            System.out.println("请求参数 " + (i + 1) + " (坐标: " + params.get("point") + ") 开始处理...");

            // 解析响应
            JSONObject jsonObject = JSONUtil.parseObj(response);
            Integer code = jsonObject.getInt("code");

            if (code != null && code == 0) {
                JSONArray dataArray = jsonObject.getJSONArray("data");
                if (dataArray != null && !dataArray.isEmpty()) {
                    // 收集数据用于总览sheet
                    for (Object item : dataArray) {
                        JSONObject itemObj = JSONUtil.parseObj(item);
                        allDataList.add(itemObj);
                        
                        // 收集id用于检查
                        Object id = itemObj.get("projectNum");
                        if (id != null) {
                            actualIds.add(id.toString());
                        }
                    }
                    System.out.println("  收集到 " + dataArray.size() + " 条数据");
                } else {
                    System.out.println("  无数据");
                }
            } else {
                String msg = jsonObject.getStr("msg");
                System.out.println("请求参数 " + (i + 1) + " 失败: " + msg);
            }
        }

        // 第二步：创建总览sheet（作为第一个sheet）
        System.out.println("\n第二步：创建总览sheet...");
        createSummarySheet(writer, allDataList);

        // 第三步：创建各个单独的sheet
        System.out.println("\n第三步：创建各个单独的sheet...");
        for (int i = 0; i < paramList.size(); i++) {
            Map<String, Object> params = paramList.get(i);

            // 调用接口
            String response = HttpRequest.post(EXPORT_ORIGIN_API_URL)
                    .header("Content-Type", "application/json")
                    .cookie("mr_backend_login_user=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uSWQiOiIyLjAwMTI0NzRlZDU4N2Q2YWFmODAzZWVmMDY3NzNiYzQ1ZjgifQ.1JXw8Ufcc0P1KfkAAvBjzrac6iAVH_nU9ie32jv3WIw")
                    .body(JSONUtil.toJsonStr(params))
                    .execute()
                    .body();

            System.out.println("请求参数 " + (i + 1) + " (坐标: " + params.get("point") + ") 开始处理...");

            // 解析响应
            JSONObject jsonObject = JSONUtil.parseObj(response);
            Integer code = jsonObject.getInt("code");

            if (code != null && code == 0) {
                JSONArray dataArray = jsonObject.getJSONArray("data");

                // 获取对应的sheet名称，如果超出范围则使用默认名称
                String sheetName;
                if (i < sheetNames.size()) {
                    sheetName = truncateSheetName(sheetNames.get(i));
                } else {
                    sheetName = "Sheet" + (i + 1);
                }

                if (dataArray != null && !dataArray.isEmpty()) {
                    // 创建新的sheet
                    writer.setSheet(sheetName);

                    // 设置列宽（3列：城市、小区id、小区名称）
                    writer.setColumnWidth(0, 15);
                    writer.setColumnWidth(1, 25);
                    writer.setColumnWidth(2, 30);

                    // 设置表头
                    List<String> headList = new ArrayList<>();
                    headList.add("城市");
                    headList.add("小区id");
                    headList.add("小区名称");
                    writer.writeSecHeadRow(headList);

                    // 写入数据
                    List<List<Object>> rowList = new ArrayList<>();
                    for (Object item : dataArray) {
                        JSONObject itemObj = JSONUtil.parseObj(item);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(itemObj.get("cityName"));
                        cellList.add(itemObj.get("resblockId"));
                        cellList.add(itemObj.get("name"));
                        rowList.add(cellList);
                    }
                    writer.write(rowList, true);

                    System.out.println("Sheet [" + sheetName + "] 写入 " + dataArray.size() + " 条数据");
                } else {
                    System.out.println("Sheet [" + sheetName + "] 无数据");
                }
            } else {
                String msg = jsonObject.getStr("msg");
                System.out.println("请求参数 " + (i + 1) + " 失败: " + msg);
            }
        }

        // 关闭写入器
        writer.close();
        System.out.println("\nExcel导出完成！");
        
        // 检查ID包含情况
        checkIds(expectedIds, actualIds);
    }
    
    /**
     * 检查ID包含情况
     */
    private static void checkIds(Set<String> expectedIds, Set<String> actualIds) {
        System.out.println("\n=== ID检查结果 ===");
        System.out.println("期望的ID数量: " + expectedIds.size());
        System.out.println("实际返回的ID数量: " + actualIds.size());
        System.out.println();
        
        // 找出包含的ID
        Set<String> foundIds = new LinkedHashSet<>();
        Set<String> missingIds = new LinkedHashSet<>();
        
        for (String expectedId : expectedIds) {
            if (actualIds.contains(expectedId)) {
                foundIds.add(expectedId);
            } else {
                missingIds.add(expectedId);
            }
        }
        
        System.out.println("✓ 已包含的ID (" + foundIds.size() + " 个):");
        if (foundIds.isEmpty()) {
            System.out.println("  无");
        } else {
            for (String id : foundIds) {
                System.out.println("  " + id);
            }
        }
        
        System.out.println();
        System.out.println("✗ 未包含的ID (" + missingIds.size() + " 个):");
        if (missingIds.isEmpty()) {
            System.out.println("  无 - 所有链接的ID都已包含！");
        } else {
            for (String id : missingIds) {
                System.out.println("  " + id);
            }
        }
    }

    /**
     * 创建总览sheet，汇总所有去重后的数据（作为第一个sheet）
     */
    private static void createSummarySheet(ExcelWriter writer, List<JSONObject> allDataList) {
        System.out.println("开始创建总览sheet，原始数据量: " + allDataList.size());

        // 根据resblockId去重
        Map<String, JSONObject> uniqueDataMap = new LinkedHashMap<>();
        for (JSONObject item : allDataList) {
            Object resblockId = item.get("resblockId");
            if (resblockId != null) {
                String key = resblockId.toString();
                // 如果不存在则添加，保留第一次出现的记录
                if (!uniqueDataMap.containsKey(key)) {
                    uniqueDataMap.put(key, item);
                }
            }
        }

        System.out.println("去重后数据量: " + uniqueDataMap.size());

        // 创建总览sheet（第一个sheet会自动创建，这里重命名为"总览"）
        writer.renameSheet("总览");

        // 设置列宽
        writer.setColumnWidth(0, 15);
        writer.setColumnWidth(1, 25);
        writer.setColumnWidth(2, 30);

        // 设置表头
        List<String> headList = new ArrayList<>();
        headList.add("城市");
        headList.add("小区id");
        headList.add("小区名称");
        writer.writeSecHeadRow(headList);

        // 写入去重后的数据
        List<List<Object>> rowList = new ArrayList<>();
        for (JSONObject itemObj : uniqueDataMap.values()) {
            List<Object> cellList = new ArrayList<>();
            cellList.add(itemObj.get("cityName"));
            cellList.add(itemObj.get("resblockId"));
            cellList.add(itemObj.get("name"));
            rowList.add(cellList);
        }
        writer.write(rowList, true);

        System.out.println("总览sheet写入完成，共 " + uniqueDataMap.size() + " 条去重后的数据");
    }

    private static List<Map<String, Object>> getParamList() {
        // 定义多个请求参数
        List<Map<String, Object>> paramList = new ArrayList<>();

        String pointArrStr = "117.009765,36.656900;117.027188,36.676048;117.004617,36.673547;116.965894,36.683803;" +
                "116.980051,36.698183;120.389104,36.073007;117.025171,36.647799;120.322170,36.072489;120.435810,36.079434;" +
                "120.182129,35.974805;117.132254,36.655029;117.126541,36.658400";


        // 解析坐标点字符串，按分号分割
        String[] points = pointArrStr.split(";");

        // 去重处理（使用LinkedHashSet保持顺序并去重）
        Set<String> pointSet = new LinkedHashSet<>();
        for (String point : points) {
            String trimmedPoint = point.trim();
            if (!trimmedPoint.isEmpty()) {
                pointSet.add(trimmedPoint);
            }
        }

        // 为每个坐标点创建参数组
        for (String point : pointSet) {
            Map<String, Object> param = new HashMap<>();
            param.put("cityId", 45);
            param.put("point", point);
            param.put("distance", 3000);
            paramList.add(param);
        }

        System.out.println("共需要处理 " + paramList.size() + " 个坐标点");
        return paramList;
    }

    private static List<String> getSheetNameList() {
        List<String> sheetNames = new ArrayList<>();
        sheetNames.add("济南市市中区纬一路482号");
        sheetNames.add("济南市历下区省府前街1号");
        sheetNames.add("济南市市中区经二路185号");
        sheetNames.add("中国航空工业集团济南特种结构研究所（637研究所）");
        sheetNames.add("中国兵器工业集团北方材料科学与工程研究院（53所）（济南）");
        sheetNames.add("青岛市市委、人民政府");
        sheetNames.add("济南市历下区马鞍山路2号");
        sheetNames.add("山东省青岛市公安局");
        sheetNames.add("中国电子科技集团第二十二研究所（青岛市）");
        sheetNames.add("中国电子科技集团第四十一研究所（青岛市）");
        sheetNames.add("山东省济南市公安局");
        sheetNames.add("山东省济南市政府");
        return sheetNames;
    }

    public static void deleteCache() {
        String str = "4511057861085\n" +
                "4511057864160\n" +
                "4511057865987\n" +
                "4511057880802\n" +
                "4511057881868\n" +
                "4511058215513\n" +
                "4511058222930\n" +
                "4511058724401\n" +
                "4511058725838\n" +
                "4511058729118\n" +
                "4511058750640\n" +
                "4511058751785\n" +
                "4511058752086\n" +
                "4511058753816\n" +
                "4511058755783\n" +
                "4511058757026\n" +
                "4511058772164\n" +
                "4511058772377\n" +
                "4511059263934\n" +
                "4511059267497\n" +
                "4511059279327\n" +
                "4511059281052\n" +
                "4511059285836\n" +
                "4511059294414\n" +
                "4511059296283\n" +
                "4511059297098\n" +
                "4511059297334\n" +
                "4511059297607\n" +
                "4511059297908\n" +
                "4511059297967\n" +
                "4511059298417\n" +
                "4511059298491\n" +
                "4511059298589\n" +
                "4511059313619\n" +
                "4511059314854\n" +
                "4511059316308\n" +
                "4511059318626\n" +
                "4511059320529\n" +
                "4511059323735\n" +
                "4511059453225\n" +
                "4511059928757\n" +
                "4511060009788\n" +
                "4511060281854\n" +
                "4511060473387\n" +
                "4511060478353\n" +
                "4511060486945\n" +
                "4511060493944\n" +
                "4511060494451\n" +
                "4511060557074\n" +
                "4511100792687\n" +
                "4511100793594\n" +
                "4511100849802\n" +
                "4511100852724\n" +
                "4511100852910\n" +
                "4511100853241\n" +
                "4511100853975\n" +
                "4511100854019\n" +
                "4511100898999\n" +
                "4511100901461\n" +
                "45000000000276\n" +
                "45000000000386\n" +
                "45000000000446\n" +
                "45000000001699\n" +
                "45000000002429\n" +
                "45000000002856\n" +
                "45000000005056\n" +
                "45000000008425\n" +
                "45000000010377\n" +
                "456941581783299\n" +
                "456942057574346\n" +
                "456944195621613\n" +
                "456944364179638\n" +
                "456945339355293\n" +
                "456946183197423\n" +
                "456950931672647\n" +
                "456988867318173\n" +
                "457007879835766\n" +
                "457009157262721\n" +
                "457009595568108\n" +
                "457011239735043\n" +
                "457011763498747\n" +
                "457012084887078\n" +
                "457012389499095\n" +
                "457013732725169\n" +
                "457031965626427\n" +
                "457098775646004\n" +
                "457099128492587\n" +
                "457101730532996\n" +
                "457102374882638\n" +
                "457102657998773\n" +
                "457103188841102\n" +
                "457103849967516\n" +
                "457103924416222\n" +
                "457104111848507\n" +
                "457104707178420\n" +
                "457418131788341\n" +
                "457419795353898\n" +
                "457419859840614\n" +
                "457419897852163\n" +
                "457420051730457\n" +
                "457420093148548\n" +
                "457420440752932\n" +
                "457420553212826\n" +
                "457421068061804\n" +
                "457421068063118\n" +
                "457421859737978\n" +
                "457422189777202\n" +
                "457422310101113\n" +
                "457424060436568\n" +
                "457425114256093\n" +
                "457425292513707\n" +
                "457425612067796\n" +
                "457425796878379\n" +
                "457462437007755\n" +
                "457462650654803\n" +
                "457467691683949\n" +
                "457467747258662\n" +
                "457484175823865\n" +
                "457485295176901\n" +
                "457485612109802\n" +
                "457486858342838\n" +
                "457487178682538\n" +
                "457488367504626\n" +
                "457490503716409\n" +
                "457508037219162\n" +
                "457509197204710\n" +
                "457512342934248\n" +
                "457573632461919\n" +
                "457574959960261\n" +
                "457575166004804\n" +
                "457575208996317\n" +
                "457576574503944\n" +
                "457576574503954\n" +
                "457578611888391\n" +
                "457626121818496\n" +
                "457643028532808\n" +
                "457665728368874\n" +
                "457741090575180\n" +
                "457741294783908\n" +
                "457741294784001\n" +
                "457741294784046\n" +
                "457743324303375\n" +
                "457804426923894\n" +
                "457823331438908\n" +
                "457851383206502\n" +
                "457853066432752\n" +
                "457857163219054\n" +
                "457876444434423\n" +
                "457877800243564\n" +
                "458012231094438\n" +
                "458053746839945\n" +
                "458054415043668\n" +
                "458055155862787\n" +
                "458055155863178\n" +
                "458055442911887\n" +
                "458099286495477\n" +
                "458103529295746\n" +
                "458139694682229\n" +
                "458169929847162\n" +
                "458170449153882\n" +
                "458187619587051\n" +
                "458233206427342\n" +
                "458254356730746\n" +
                "458276901113383\n" +
                "458367741087780\n" +
                "458376825950805\n" +
                "458436246655919\n" +
                "458645049332128\n" +
                "458787299937544\n" +
                "458825070170572\n" +
                "458934716092388\n" +
                "459092451282166\n" +
                "459096255515917\n" +
                "459120423095992\n" +
                "459544636051416\n" +
                "459591059656073\n" +
                "459706515477479\n" +
                "4510001737854733\n" +
                "4510138324578204\n" +
                "4510138473477021\n" +
                "4510138521972583\n" +
                "4510138689482513\n" +
                "4510163664728842\n" +
                "4510360001146154\n" +
                "4510497364603873\n" +
                "4510952323116096\n" +
                "4511130656271997\n" +
                "4511154494337297\n" +
                "4511248319869690\n" +
                "4511335327296675\n" +
                "4511431977169657\n" +
                "4511517119967574\n" +
                "4511655325166966\n" +
                "4511745320513133\n" +
                "4511810768957202\n" +
                "4512065847127870\n" +
                "4512153217887570\n" +
                "4512519054781922\n" +
                "4512540657806401\n" +
                "4512829598692257\n" +
                "4513091389321098\n" +
                "4513220457492879\n" +
                "4513258553830907\n" +
                "4513783926845998\n" +
                "4514009276576386\n" +
                "4514622409918598\n" +
                "4514916683598965\n" +
                "4514916683599716\n" +
                "4514916920552491\n" +
                "4515054206175748\n" +
                "4516384730082454\n" +
                "4517523950497891\n" +
                "4517973612939993\n" +
                "4518019630722670\n" +
                "4520021404786043\n" +
                "4520022390669176\n" +
                "4520024713229079\n" +
                "4520030383196640\n" +
                "4520034123041466\n" +
                "4520036868102073\n" +
                "4520036934173803\n" +
                "4520037067354061\n" +
                "4520039705037808\n" +
                "4520040006150019\n" +
                "4520042474950626\n" +
                "4520044604161151\n" +
                "4520049065401189\n" +
                "4511057827338\n" +
                "4511057828099\n" +
                "4511057829962\n" +
                "4511057832660\n" +
                "4511057835639\n" +
                "4511057840927\n" +
                "4511057847756\n" +
                "4511057849153\n" +
                "4511057852450\n" +
                "4511057854422\n" +
                "4511057864384\n" +
                "4511057877515\n" +
                "4511057891100\n" +
                "4511057893686\n" +
                "4511057897316\n" +
                "4511057900964\n" +
                "4511057902002\n" +
                "4511058181899\n" +
                "4511058186106\n" +
                "4511058189375\n" +
                "4511058192181\n" +
                "4511058196181\n" +
                "4511058205060\n" +
                "4511058208747\n" +
                "4511058216884\n" +
                "4511058381509\n" +
                "4511058394265\n" +
                "4511058405497\n" +
                "4511058577779\n" +
                "4511058580230\n" +
                "4511058581974\n" +
                "4511058583572\n" +
                "4511058585027\n" +
                "4511058587758\n" +
                "4511059020681\n" +
                "4511059036218\n" +
                "4511059062478\n" +
                "4511059152951\n" +
                "4511059177989\n" +
                "4511059185288\n" +
                "4511059226667\n" +
                "4511059232381\n" +
                "4511059259275\n" +
                "4511059268725\n" +
                "4511059276692\n" +
                "4511059283040\n" +
                "4511059286904\n" +
                "4511059298843\n" +
                "4511059301164\n" +
                "4511059301402\n" +
                "4511059301797\n" +
                "4511059315387\n" +
                "4511059329144\n" +
                "4511059334044\n" +
                "4511059356779\n" +
                "4511059362784\n" +
                "4511059364648\n" +
                "4511059371164\n" +
                "4511059372965\n" +
                "4511059375202\n" +
                "4511059376780\n" +
                "4511059864566\n" +
                "4511100900393\n" +
                "45000000000702\n" +
                "45000000003439\n" +
                "45000000004526\n" +
                "45000000012829\n" +
                "456986511692178\n" +
                "456989187658273\n" +
                "457104850047271\n" +
                "457106149231709\n" +
                "457121261572446\n" +
                "457121907756265\n" +
                "457144537599494\n" +
                "457421798134004\n" +
                "457422440649366\n" +
                "457424744108885\n" +
                "457425796879289\n" +
                "457442659554233\n" +
                "457443863842874\n" +
                "457443863843453\n" +
                "457443863843634\n" +
                "457443863843753\n" +
                "457443863843783\n" +
                "457444041838991\n" +
                "457463456223278\n" +
                "457463456223329\n" +
                "457463456223499\n" +
                "457467387072881\n" +
                "457467800211699\n" +
                "457486954811152\n" +
                "457489696313099\n" +
                "457490522853262\n" +
                "457507478065922\n" +
                "457510940463073\n" +
                "457512532463887\n" +
                "457512624214668\n" +
                "457513418511198\n" +
                "457574970183426\n" +
                "457741090575237\n" +
                "457743250902113\n" +
                "457914513511384\n" +
                "457964789584241\n" +
                "458050016006229\n" +
                "458052218540948\n" +
                "458053605806345\n" +
                "458054834999923\n" +
                "458055073288638\n" +
                "458096276819017\n" +
                "458099239833414\n" +
                "458122289107757\n" +
                "458125948113410\n" +
                "458139840171539\n" +
                "458141295333063\n" +
                "458150552163280\n" +
                "458193082666670\n" +
                "458237289582289\n" +
                "458238270787891\n" +
                "458306634796887\n" +
                "458326550401509\n" +
                "458419328667437\n" +
                "458506499673579\n" +
                "458533684531201\n" +
                "458599940115565\n" +
                "458804618481278\n" +
                "458827034677499\n" +
                "459237806723179\n" +
                "459544094198973\n" +
                "459550789095827\n" +
                "459684304277382\n" +
                "459753229537186\n" +
                "459846470225610\n" +
                "459868362134303\n" +
                "4511153954057230\n" +
                "4512025478262428\n" +
                "4512105318936457\n" +
                "4514352850627803\n" +
                "4516002638710977\n" +
                "4517630927031174\n" +
                "4518090133566377\n" +
                "4520020367556098\n" +
                "4520020696854828\n" +
                "4520021105827908\n" +
                "4520021125751709\n" +
                "4520022661307560\n" +
                "4520024205541018\n" +
                "4520024685972374\n" +
                "4520024688065746\n" +
                "4520039040046404\n" +
                "4520039878221794\n" +
                "4520045110663724\n" +
                "4511058065467\n" +
                "4511058068048\n" +
                "4511058362660\n" +
                "4511058365046\n" +
                "4511058371513\n" +
                "4511058372173\n" +
                "4511058375546\n" +
                "4511058381508\n" +
                "4511058383599\n" +
                "4511058391888\n" +
                "4511058395223\n" +
                "4511058395617\n" +
                "4511058396676\n" +
                "4511058403209\n" +
                "4511058403675\n" +
                "4511058404299\n" +
                "4511058407195\n" +
                "4511058557021\n" +
                "4511058573952\n" +
                "4511059519767\n" +
                "4511059882446\n" +
                "4511059883805\n" +
                "4511059884122\n" +
                "4511059884623\n" +
                "4511059885194\n" +
                "4511059886172\n" +
                "4511059889004\n" +
                "4511059891661\n" +
                "4511060278842\n" +
                "4511060280374\n" +
                "4511060281375\n" +
                "4511100774918\n" +
                "4511100810802\n" +
                "4511100813105\n" +
                "4511100814239\n" +
                "4511100815685\n" +
                "4511100842310\n" +
                "4511100843857\n" +
                "4511100848609\n" +
                "4511100854641\n" +
                "4511100858668\n" +
                "45000000004421\n" +
                "457465489413096\n" +
                "457532357103552\n" +
                "457577886535911\n" +
                "457666751254473\n" +
                "457880561667090\n" +
                "458174638740413\n" +
                "458374548442726\n" +
                "458798644482397\n" +
                "458871432958017\n" +
                "459025903144647\n" +
                "459664350925307\n" +
                "459912595264167\n" +
                "4510881814506785\n" +
                "4512239989649443\n" +
                "4513464053494543\n" +
                "4513915526802519\n" +
                "4520027794345870\n" +
                "4520038921579189\n" +
                "4511057917481\n" +
                "4511057920949\n" +
                "4511057921778\n" +
                "4511057928025\n" +
                "4511057971957\n" +
                "4511057988713\n" +
                "4511057988921\n" +
                "4511057989764\n" +
                "4511058359018\n" +
                "4511058360779\n" +
                "4511058360959\n" +
                "4511058361847\n" +
                "4511058364635\n" +
                "4511058367192\n" +
                "4511058371150\n" +
                "4511058371723\n" +
                "4511058373034\n" +
                "4511058374092\n" +
                "4511058376484\n" +
                "4511058377285\n" +
                "4511058379112\n" +
                "4511058379113\n" +
                "4511058384738\n" +
                "4511058385580\n" +
                "4511058386511\n" +
                "4511058386701\n" +
                "4511058386811\n" +
                "4511058387193\n" +
                "4511058388381\n" +
                "4511058388647\n" +
                "4511058402400\n" +
                "4511058404519\n" +
                "4511058405090\n" +
                "4511058405541\n" +
                "4511058405646\n" +
                "4511059706350\n" +
                "4511059711437\n" +
                "4511059885776\n" +
                "4511059889128\n" +
                "4511059895319\n" +
                "4511059895795\n" +
                "4511059898812\n" +
                "4511059900424\n" +
                "4511059900963\n" +
                "4511059901841\n" +
                "4511059904755\n" +
                "4511059908676\n" +
                "4511059910077\n" +
                "4511059910688\n" +
                "4511059913397\n" +
                "4511059949428\n" +
                "4511059952055\n" +
                "4511059962737\n" +
                "4511059965331\n" +
                "4511059972348\n" +
                "4511059980210\n" +
                "4511059987208\n" +
                "4511060001683\n" +
                "4511060020258\n" +
                "4511060023881\n" +
                "4511060078559\n" +
                "4511060280300\n" +
                "4511060280580\n" +
                "4511060281484\n" +
                "4511060283508\n" +
                "4511060459977\n" +
                "4511060463723\n" +
                "4511100804489\n" +
                "4511100815279\n" +
                "4511100840189\n" +
                "4511100848472\n" +
                "4511100849009\n" +
                "4511100855786\n" +
                "45000000000280\n" +
                "45000000002292\n" +
                "45000000002704\n" +
                "45000000023765\n" +
                "45000000029043\n" +
                "456942057573963\n" +
                "456943281262543\n" +
                "456944364179649\n" +
                "456946183197427\n" +
                "457013065042954\n" +
                "457034153218766\n" +
                "457034372370519\n" +
                "457424744108452\n" +
                "457442823656038\n" +
                "457464990552564\n" +
                "457466682692543\n" +
                "457487594705192\n" +
                "457488263959156\n" +
                "457507839823353\n" +
                "457511279939175\n" +
                "457512342933875\n" +
                "457513076151212\n" +
                "457513095548137\n" +
                "457538114571470\n" +
                "457553327051756\n" +
                "457554393713725\n" +
                "457554393714077\n" +
                "457575285281174\n" +
                "457577391344647\n" +
                "457742138101949\n" +
                "457829763404062\n" +
                "457850437128813\n" +
                "457892900525051\n" +
                "457898479997106\n" +
                "457944337896354\n" +
                "458326154824860\n" +
                "458556354219504\n" +
                "458957512921799\n" +
                "459639672950714\n" +
                "459824103313127\n" +
                "4510132940664778\n" +
                "4510408704880540\n" +
                "4511491870257753\n" +
                "4515575613975822\n" +
                "4520020451454141\n" +
                "4520024179299346\n" +
                "4520026936230297\n" +
                "4520027995730066\n" +
                "4520029442332691\n" +
                "4520029483239114\n" +
                "4511058537323\n" +
                "4511058542303\n" +
                "4511058543193\n" +
                "4511058544137\n" +
                "4511058549395\n" +
                "4511058551580\n" +
                "4511058552333\n" +
                "4511058554914\n" +
                "4511058578517\n" +
                "4511059066732\n" +
                "4511059210059\n" +
                "4511059210199\n" +
                "4511059210281\n" +
                "4511059237198\n" +
                "4511059251917\n" +
                "4511059255802\n" +
                "4511059265918\n" +
                "4511059267859\n" +
                "4511059289204\n" +
                "4511059289871\n" +
                "4511059291546\n" +
                "4511059293052\n" +
                "4511059305855\n" +
                "4511059389742\n" +
                "4511059392890\n" +
                "4511059396558\n" +
                "4511059399391\n" +
                "4511059409482\n" +
                "4511059411233\n" +
                "4511059412235\n" +
                "4511059412862\n" +
                "4511059715175\n" +
                "4511059719215\n" +
                "4511059808341\n" +
                "4511059824041\n" +
                "4511059824767\n" +
                "4511100842866\n" +
                "4511100900611\n" +
                "45000000002650\n" +
                "45000000005460\n" +
                "45000000025924\n" +
                "456945379462476\n" +
                "457624208167304\n" +
                "457642140650633\n" +
                "458960008008029\n" +
                "4511362060479849\n" +
                "4514194006067647\n" +
                "4520029416111250\n" +
                "1511041213948\n" +
                "1511041214008\n" +
                "1511041214009\n" +
                "1511041214359\n" +
                "1511041214408\n" +
                "1511041214538\n" +
                "1511041214839\n" +
                "1511041215554\n" +
                "1511041215672\n" +
                "1511041216222\n" +
                "1511041216491\n" +
                "1511041216498\n" +
                "1511041219120\n" +
                "1511041219123\n" +
                "1511041220089\n" +
                "1511041220226\n" +
                "1511041220227\n" +
                "1511041223013\n" +
                "1511041223077\n" +
                "1511041223230\n" +
                "1511041223543\n" +
                "1511041223566\n" +
                "1511041224632\n" +
                "1511041224710\n" +
                "1511041224782\n" +
                "1511041224887\n" +
                "1511041224974\n" +
                "1511041224975\n" +
                "1511041226329\n" +
                "1511041229546\n" +
                "1511041229601\n" +
                "1511041229803\n" +
                "1511041230511\n" +
                "1511041230532\n" +
                "1511041230630\n" +
                "1511041230791\n" +
                "1511041231872\n" +
                "1511041233015\n" +
                "1511041234426\n" +
                "1511041234847\n" +
                "1511041235373\n" +
                "1511041235823\n" +
                "1511041235853\n" +
                "1511041235956\n" +
                "1511041236208\n" +
                "1511041236324\n" +
                "1511041236417\n" +
                "1511041236620\n" +
                "1511041236906\n" +
                "1511041236931\n" +
                "1511041237038\n" +
                "1511041237039\n" +
                "1511041237919\n" +
                "1511041238252\n" +
                "1511041238485\n" +
                "1511041238729\n" +
                "1511041238866\n" +
                "1511041239061\n" +
                "1511041239465\n" +
                "1511041240378\n" +
                "1511041240379\n" +
                "1511041240778\n" +
                "1511041240796\n" +
                "1511041241381\n" +
                "1511041242541\n" +
                "1511041242839\n" +
                "1511041243597\n" +
                "1511041243876\n" +
                "1511041245265\n" +
                "1511041245749\n" +
                "1511041245822\n" +
                "1511041247843\n" +
                "1511041249136\n" +
                "1511041249648\n" +
                "1511041250575\n" +
                "1511041251019\n" +
                "1511041252599\n" +
                "1511041254642\n" +
                "1511041254848\n" +
                "1511041255527\n" +
                "1511041255842\n" +
                "1511041256496\n" +
                "1511041257080\n" +
                "1511041257558\n" +
                "1511041259764\n" +
                "1511041260724\n" +
                "1511041261241\n" +
                "1511041261257\n" +
                "1511041261679\n" +
                "1511041261868\n" +
                "1511041261869\n" +
                "1511041261956\n" +
                "1511041261957\n" +
                "1511041262294\n" +
                "1511041262295\n" +
                "1511041262304\n" +
                "1511041262368\n" +
                "1511041262371\n" +
                "1511041262791\n" +
                "1511041263766\n" +
                "1511041264274\n" +
                "1511041264275\n" +
                "1511041264276\n" +
                "1511041264994\n" +
                "1511041266210\n" +
                "1511041266464\n" +
                "1511041266968\n" +
                "1511041267592\n" +
                "1511041267919\n" +
                "1511041269006\n" +
                "1511041270053\n" +
                "1511041273320\n" +
                "1511041274176\n" +
                "1511041275076\n" +
                "1511041276783\n" +
                "1511041278650\n" +
                "1511041278785\n" +
                "1511041282501\n" +
                "1511041285128\n" +
                "1511041285608\n" +
                "1511041285745\n" +
                "1511041285835\n" +
                "1511041286486\n" +
                "1511041287558\n" +
                "1511041289733\n" +
                "1511041290376\n" +
                "1511041290552\n" +
                "1511041291558\n" +
                "1511041294023\n" +
                "1511041294385\n" +
                "1511041297888\n" +
                "1511041298042\n" +
                "1511041301052\n" +
                "1511041301055\n" +
                "1511041301069\n" +
                "1511041302938\n" +
                "1511041304005\n" +
                "1511041304421\n" +
                "1511041304895\n" +
                "1511041305126\n" +
                "1511041305688\n" +
                "1511041306572\n" +
                "1511041306854\n" +
                "1511041306855\n" +
                "1511041306881\n" +
                "1511041307105\n" +
                "1511041307817\n" +
                "1511041308558\n" +
                "1511041309799\n" +
                "1511041310844\n" +
                "1511041311246\n" +
                "1511041311925\n" +
                "1511041312253\n" +
                "1511041312260\n" +
                "1511041312626\n" +
                "1511041313192\n" +
                "1511041314690\n" +
                "1511041315233\n" +
                "1511041315698\n" +
                "1511041315700\n" +
                "1511041316510\n" +
                "1511041318667\n" +
                "1511041318977\n" +
                "1511041321390\n" +
                "1511041321392\n" +
                "1511041321876\n" +
                "1511041322290\n" +
                "1511041325086\n" +
                "1511041325095\n" +
                "1511041325374\n" +
                "1511041325376\n" +
                "1511041326189\n" +
                "1511041326906\n" +
                "1511041326942\n" +
                "1511041327139\n" +
                "1511041327495\n" +
                "1511041327629\n" +
                "1511041331157\n" +
                "1511041333155\n" +
                "1511041336232\n" +
                "1511041337627\n" +
                "1511041340874\n" +
                "1511041342650\n" +
                "1511041344188\n" +
                "1511041346315\n" +
                "1511041346513\n" +
                "1511041350278\n" +
                "1511041350536\n" +
                "1511041350753\n" +
                "1511041350821\n" +
                "1511041351926\n" +
                "1511041352152\n" +
                "1511041352307\n" +
                "1511041352914\n" +
                "1511041352963\n" +
                "1511041353196\n" +
                "1511041353222\n" +
                "1511041354235\n" +
                "1511041355838\n" +
                "1511041356391\n" +
                "1511041356431\n" +
                "1511041358241\n" +
                "1511041358711\n" +
                "1511041358842\n" +
                "1511041359927\n" +
                "1511041359928\n" +
                "1511041359929\n" +
                "1511041362340\n" +
                "1511041363212\n" +
                "1511041363606\n" +
                "1511041365489\n" +
                "1511041366115\n" +
                "1511041366153\n" +
                "1511041368249\n" +
                "1511041368479\n" +
                "1511041369134\n" +
                "1511041369530\n" +
                "1511041373294\n" +
                "1511041373978\n" +
                "1511041374226\n" +
                "1511041374359\n" +
                "1511041374631\n" +
                "1511041723900\n" +
                "1511041791885\n" +
                "1511041841213\n" +
                "1511041863919\n" +
                "1511041864162\n" +
                "1511041877156\n" +
                "1511041947120\n" +
                "1511041954024\n" +
                "1511041964020\n" +
                "1511041968306\n" +
                "1511041997442\n" +
                "1511041999885\n" +
                "1511042004927\n" +
                "1511042522320\n" +
                "1511042663835\n" +
                "1511042719872\n" +
                "1511042784647\n" +
                "1511042804180\n" +
                "1511042853740\n" +
                "1511042933050\n" +
                "1511042946002\n" +
                "1511042956999\n" +
                "1511042959105\n" +
                "1511043269107\n" +
                "1511043271901\n" +
                "1511043467347\n" +
                "1511043498698\n" +
                "1511043553701\n" +
                "1511043592859\n" +
                "1511043619414\n" +
                "1511043655728\n" +
                "1511044027471\n" +
                "1511044058759\n" +
                "1511044075251\n" +
                "1511044149960\n" +
                "1511044213782\n" +
                "1511044331629\n" +
                "1511044506974\n" +
                "1511044596054\n" +
                "1511044664437\n" +
                "1511044686685\n" +
                "1511044827942\n" +
                "1511044928043\n" +
                "1511045013404\n" +
                "1511045099663\n" +
                "1511045419836\n" +
                "1511045504509\n" +
                "1511045659675\n" +
                "1511046152642\n" +
                "1511046347728\n" +
                "1511046424057\n" +
                "1511046424399\n" +
                "1511046440479\n" +
                "1511046455054\n" +
                "1511046455223\n" +
                "1511046467026\n" +
                "1511046493154\n" +
                "1511046634366\n" +
                "1511046919572\n" +
                "1511047087354\n" +
                "1511047215032\n" +
                "1511047323037\n" +
                "1511047323363\n" +
                "1511047329243\n" +
                "1511047954255\n" +
                "1511047956123\n" +
                "1511047980424\n" +
                "1511061851709\n" +
                "1511061938964\n" +
                "1511061983497\n" +
                "1511062133647\n" +
                "1511062781925\n" +
                "1511062783139\n" +
                "1511062973969\n" +
                "1511063024675\n" +
                "1511063141024\n" +
                "1511063213643\n" +
                "1511063318025\n" +
                "1511100497292\n" +
                "1511100874827\n" +
                "1511100905284\n" +
                "4011054068035\n" +
                "4011054080256\n" +
                "4011054119301\n" +
                "4011054125070\n" +
                "4011054127191\n" +
                "4011054136996\n" +
                "4011054150524\n" +
                "4011054731707\n" +
                "4011054876888\n" +
                "4011055096927\n" +
                "4011055097162\n" +
                "4011056267292\n" +
                "4011057341608\n" +
                "4011057342553\n" +
                "4011057342868\n" +
                "4011057343484\n" +
                "4011057345963\n" +
                "156878628688179\n" +
                "156945698492396\n" +
                "157099425239082\n" +
                "157121782976368\n" +
                "157218050379347\n" +
                "1510750763741069\n" +
                "1512020811575855\n" +
                "1512331296763429\n" +
                "1520022936153051\n" +
                "4511057879139\n" +
                "4511057879344\n" +
                "4511057879915\n" +
                "4511057887100\n" +
                "4511057888134\n" +
                "4511060517414\n" +
                "4511060521496\n" +
                "4511060525207\n" +
                "4511060540696\n" +
                "4511060554557\n" +
                "4511061869432\n" +
                "4511061869704\n" +
                "4511100901510\n" +
                "457444791571354\n" +
                "457743250902045\n" +
                "457857163219516\n" +
                "457921370411652\n" +
                "457943857910016\n" +
                "457986529709527\n" +
                "458053895737444\n" +
                "458103214722088\n" +
                "458141078802329\n" +
                "458283035021201\n" +
                "458347686284943\n" +
                "458463197155021\n" +
                "458463400841535\n" +
                "458530726761082\n" +
                "458555553632857\n" +
                "459028180127093\n" +
                "459095884583127\n" +
                "459997694021124\n" +
                "4510139457564325\n" +
                "4510139557703003\n" +
                "4510846380504013\n" +
                "4514806041504807\n" +
                "1511041326116\n" +
                "1511041343846\n" +
                "1511047753224\n" +
                "1511062872924\n" +
                "1511062957503\n" +
                "1511063102226\n" +
                "1511100334315\n" +
                "4011054875142\n" +
                "4011054883533\n" +
                "4011054884437\n" +
                "4011054976062\n" +
                "4011054984171\n" +
                "4011055010364\n" +
                "4011055069421\n" +
                "4011055111171\n" +
                "4011055414432\n" +
                "4011055416271\n" +
                "4011055418846\n" +
                "4011055418847\n" +
                "4011055430723\n" +
                "4011055430807\n" +
                "4011055432017\n" +
                "4011055488918\n" +
                "4011055489929\n" +
                "4011055491274\n" +
                "4011055491785\n" +
                "4011055494061\n" +
                "4011055494254\n" +
                "4011055496137\n" +
                "4011055496377\n" +
                "4011055499391\n" +
                "4011055501442\n" +
                "4011055591649\n" +
                "4011055592188\n" +
                "4011055599137\n" +
                "4011055604942\n" +
                "4011055610702\n" +
                "4011055616508\n" +
                "4011055617643\n" +
                "4011055617806\n" +
                "4011055618762\n" +
                "4011055619855\n" +
                "4011055620926\n" +
                "4011055716317\n" +
                "4011055721468\n" +
                "4011055723354\n" +
                "4011055726120\n" +
                "4011055729912\n" +
                "4011055742066\n" +
                "4011055976680\n" +
                "4011056272680\n" +
                "4011057293341\n" +
                "4011057310850\n" +
                "4011057312629\n" +
                "4011057316971\n" +
                "4011057318459\n" +
                "4011057319951\n" +
                "4011057334980\n" +
                "4011057348531\n" +
                "4011057349568\n" +
                "4011057349741\n" +
                "4011057350133\n" +
                "4011057350282\n" +
                "4011057350555\n" +
                "4011057351084\n" +
                "4011057352143\n" +
                "4011057352348\n" +
                "4011057352446\n" +
                "4011057352613\n" +
                "4011057353194\n" +
                "4011057353750\n" +
                "4011057355205\n" +
                "4011057356208\n" +
                "4011057358118\n" +
                "4011057358330\n" +
                "4011057358974\n" +
                "4011057360102\n" +
                "4011057360593\n" +
                "4011059743233\n" +
                "4011059754221\n" +
                "4011059755747\n" +
                "15000000000238\n" +
                "15000000003706\n" +
                "15000000036145\n" +
                "156897642516964\n" +
                "156897699663845\n" +
                "157149556347309\n" +
                "157511169315555\n" +
                "157511630688313\n" +
                "157577744453544\n" +
                "157578287090713\n" +
                "157579943579544\n" +
                "157689051844763\n" +
                "157690910708649\n" +
                "157690988301939\n" +
                "157733142629783\n" +
                "157740235198213\n" +
                "157853066432971\n" +
                "157941975453454\n" +
                "158054028120315\n" +
                "158054095753727\n" +
                "158122973041515\n" +
                "158123500211375\n" +
                "158143790943974\n" +
                "158143914414212\n" +
                "158170449153274\n" +
                "158308335062504\n" +
                "158396053163290\n" +
                "158415230046200\n" +
                "158481761930787\n" +
                "158686221144927\n" +
                "158688256954620\n" +
                "158691038040568\n" +
                "158730726641876\n" +
                "158864818540304\n" +
                "158870319108439\n" +
                "158870583610742\n" +
                "158895422279149\n" +
                "158917917642208\n" +
                "159001551540440\n" +
                "159007907483912\n" +
                "159024846967252\n" +
                "159070447176775\n" +
                "159483691240975\n" +
                "159596797202479\n" +
                "159636735627702\n" +
                "159816909033073\n" +
                "1510002133168957\n" +
                "1510115561827903\n" +
                "1510183331296181\n" +
                "1510495969997675\n" +
                "1510749061115322\n" +
                "1510907386130744\n" +
                "1511544416234535\n" +
                "1511723468189596\n" +
                "1512381750309100\n" +
                "1512651418366605\n" +
                "1512652277936932\n" +
                "1512835642159791\n" +
                "1512874435802084\n" +
                "1513532369530882\n" +
                "1513851331694475\n" +
                "1516411356596627\n" +
                "1516888961993299\n" +
                "1517023487454804\n" +
                "1517086502176861\n" +
                "1517767790816460\n" +
                "1520020394810100\n" +
                "1520020568913392\n" +
                "1520020568915388\n" +
                "1520020823736090\n" +
                "1520020877210533\n" +
                "1520020877211589\n" +
                "1520020982070907\n" +
                "1520020986259297\n" +
                "1520020999896515\n" +
                "1520021030330942\n" +
                "1520021654363740\n" +
                "1520021881940073\n" +
                "1520021983651350\n" +
                "1520022083399778\n" +
                "1520022085499436\n" +
                "1520022290004150\n" +
                "1520022437847286\n" +
                "1520022689609695\n" +
                "1520022691706213\n" +
                "1520022710581150\n" +
                "1520022936152164\n" +
                "1520022966560563\n" +
                "1520023465947864\n" +
                "1520023489013348\n" +
                "1520023525718710\n" +
                "1520023567656447\n" +
                "1520023598067227\n" +
                "1520023599117129\n" +
                "1520023666297288\n" +
                "1520023774320150\n" +
                "1520023822614319\n" +
                "1520024211833781\n" +
                "1520024376498846\n" +
                "1520024882110078\n" +
                "1520024893643246\n" +
                "1520026006430190\n" +
                "1520026091846018\n" +
                "1520026416910294\n" +
                "1520026838714438\n" +
                "1520027438683422\n" +
                "1520027517335715\n" +
                "1520028284135203\n" +
                "1520028782492785\n" +
                "1520029158940522\n" +
                "1520031267388137\n" +
                "1520031823569944\n" +
                "1520032328181128\n" +
                "1520034089491403\n" +
                "1520035850568099\n" +
                "1520036357264811\n" +
                "1520037236214517\n" +
                "1520038975058496\n" +
                "1520041728071081\n" +
                "1520044284155914\n" +
                "1511041212990\n" +
                "1511041213875\n" +
                "1511041214010\n" +
                "1511041214947\n" +
                "1511041216490\n" +
                "1511041218244\n" +
                "1511041218663\n" +
                "1511041220129\n" +
                "1511041220235\n" +
                "1511041220272\n" +
                "1511041220676\n" +
                "1511041223166\n" +
                "1511041225006\n" +
                "1511041227044\n" +
                "1511041228294\n" +
                "1511041230746\n" +
                "1511041230912\n" +
                "1511041231970\n" +
                "1511041232684\n" +
                "1511041233608\n" +
                "1511041235414\n" +
                "1511041235792\n" +
                "1511041236807\n" +
                "1511041237918\n" +
                "1511041238251\n" +
                "1511041238425\n" +
                "1511041238486\n" +
                "1511041239161\n" +
                "1511041239183\n" +
                "1511041240411\n" +
                "1511041240500\n" +
                "1511041240779\n" +
                "1511041241491\n" +
                "1511041241581\n" +
                "1511041242465\n" +
                "1511041243596\n" +
                "1511041245792\n" +
                "1511041246167\n" +
                "1511041246577\n" +
                "1511041248366\n" +
                "1511041251102\n" +
                "1511041251300\n" +
                "1511041255594\n" +
                "1511041255722\n" +
                "1511041257302\n" +
                "1511041259589\n" +
                "1511041259627\n" +
                "1511041259721\n" +
                "1511041259769\n" +
                "1511041261892\n" +
                "1511041262370\n" +
                "1511041263687\n" +
                "1511041266209\n" +
                "1511041282774\n" +
                "1511041293491\n" +
                "1511041305322\n" +
                "1511041317683\n" +
                "1511041326448\n" +
                "1511041335760\n" +
                "1511041339530\n" +
                "1511041347039\n" +
                "1511041347285\n" +
                "1511041357025\n" +
                "1511041362353\n" +
                "1511041371956\n" +
                "1511041390809\n" +
                "1511041391425\n" +
                "1511041562316\n" +
                "1511041793722\n" +
                "1511041920452\n" +
                "1511042505898\n" +
                "1511043648481\n" +
                "1511043655402\n" +
                "1511044151544\n" +
                "1511046309595\n" +
                "1511046770574\n" +
                "1511047000064\n" +
                "1511047127706\n" +
                "1511047197997\n" +
                "1511063012877\n" +
                "1511063211352\n" +
                "156879658126974\n" +
                "157353153630770\n" +
                "1513013573184601\n" +
                "1511062966124\n" +
                "1511062970537\n" +
                "1511063165425\n" +
                "1511063452747\n" +
                "1511063467208\n" +
                "1511063561195\n" +
                "1511063590392\n" +
                "1511063593920\n" +
                "1511063607089\n" +
                "1511063623816\n" +
                "1511063695115\n" +
                "1511063728963\n" +
                "1511063904841\n" +
                "1511099402215\n" +
                "1511099568583\n" +
                "1511099772672\n" +
                "1511099838046\n" +
                "1511099977791\n" +
                "1511100006736\n" +
                "1511100092292\n" +
                "1511100402289\n" +
                "1511100468238\n" +
                "1511100539479\n" +
                "1511100578549\n" +
                "1511100639693\n" +
                "1511100640694\n" +
                "1511100746520\n" +
                "4011055480185\n" +
                "4011055481785\n" +
                "4011055482898\n" +
                "4011055483401\n" +
                "4011055487173\n" +
                "4011055488495\n" +
                "4011055508586\n" +
                "4011055540564\n" +
                "4011055543459\n" +
                "4011055545720\n" +
                "4011055545791\n" +
                "4011055546942\n" +
                "4011055548708\n" +
                "4011055550612\n" +
                "4011055551943\n" +
                "4011055553191\n" +
                "4011055554182\n" +
                "4011055555350\n" +
                "4011055557045\n" +
                "4011055558884\n" +
                "4011055561454\n" +
                "4011055562860\n" +
                "4011055566564\n" +
                "4011055567690\n" +
                "4011055569964\n" +
                "4011055570957\n" +
                "4011055573830\n" +
                "4011055575513\n" +
                "4011055580158\n" +
                "4011055581391\n" +
                "4011055582587\n" +
                "4011055586004\n" +
                "4011055589510\n" +
                "4011055608282\n" +
                "4011055609122\n" +
                "4011055609954\n" +
                "4011055611190\n" +
                "4011055613645\n" +
                "4011055617921\n" +
                "4011055834605\n" +
                "4011055836835\n" +
                "4011055838259\n" +
                "4011055838754\n" +
                "4011055841257\n" +
                "4011055841521\n" +
                "4011055841986\n" +
                "4011055843972\n" +
                "4011055844235\n" +
                "4011055844362\n" +
                "4011055864058\n" +
                "4011055865048\n" +
                "4011055865178\n" +
                "4011055866608\n" +
                "4011055866733\n" +
                "4011055869471\n" +
                "4011055869854\n" +
                "4011055870303\n" +
                "4011055870719\n" +
                "4011055872264\n" +
                "4011055872815\n" +
                "4011055874635\n" +
                "4011055877253\n" +
                "4011055880510\n" +
                "4011055884808\n" +
                "4011055886270\n" +
                "4011055887357\n" +
                "4011055888742\n" +
                "4011055889718\n" +
                "4011055911733\n" +
                "4011055916403\n" +
                "4011055917147\n" +
                "4011055917938\n" +
                "4011055918545\n" +
                "4011055920073\n" +
                "4011055921240\n" +
                "4011055922440\n" +
                "4011055923072\n" +
                "4011055924359\n" +
                "4011055924642\n" +
                "4011055927706\n" +
                "4011055927903\n" +
                "4011055929471\n" +
                "4011055930210\n" +
                "4011055931106\n" +
                "4011055932339\n" +
                "4011055936527\n" +
                "4011055937962\n" +
                "4011055945602\n" +
                "4011055964443\n" +
                "4011055986072\n" +
                "4011055986490\n" +
                "4011055998680\n" +
                "4011056002502\n" +
                "4011056037385\n" +
                "4011056063646\n" +
                "4011056228917\n" +
                "4011056232902\n" +
                "4011056233881\n" +
                "4011056241072\n" +
                "4011056242503\n" +
                "4011056245765\n" +
                "4011056246864\n" +
                "4011056252553\n" +
                "4011056252849\n" +
                "4011056256856\n" +
                "4011056258229\n" +
                "4011056272232\n" +
                "4011056274570\n" +
                "4011056282038\n" +
                "4011056282638\n" +
                "4011056289004\n" +
                "4011056290247\n" +
                "4011056291681\n" +
                "4011056292002\n" +
                "4011056293172\n" +
                "4011056294000\n" +
                "4011056296831\n" +
                "4011056297939\n" +
                "4011056299625\n" +
                "4011056305538\n" +
                "4011056308879\n" +
                "4011056311250\n" +
                "4011056311911\n" +
                "4011056316934\n" +
                "4011056318130\n" +
                "4011056319351\n" +
                "4011056320997\n" +
                "4011056331430\n" +
                "15000000001129\n" +
                "15000000006179\n" +
                "15000000006286\n" +
                "15000000008728\n" +
                "15000000008892\n" +
                "15000000021270\n" +
                "15000000033338\n" +
                "15000000036231\n" +
                "15000000036234\n" +
                "156991471193476\n" +
                "157121261572595\n" +
                "157216856837577\n" +
                "157309216985638\n" +
                "157577575108049\n" +
                "157737207959054\n" +
                "157755652936011\n" +
                "157758438216044\n" +
                "157760625544616\n" +
                "157807437648503\n" +
                "157826722532755\n" +
                "157891132362492\n" +
                "157894455825012\n" +
                "157988206646023\n" +
                "158308099134084\n" +
                "158327301966896\n" +
                "158574437700017\n" +
                "158775353512023\n" +
                "158778316001194\n" +
                "159073447154621\n" +
                "1510276364628030\n" +
                "1510748894130012\n" +
                "1510749810061040\n" +
                "1511272652337111\n" +
                "1511385325498631\n" +
                "1511539573387670\n" +
                "1512421013189614\n" +
                "1512651418366137\n" +
                "1512966667759801\n" +
                "1513849419090583\n" +
                "1515296889654633\n" +
                "1517161880875915\n" +
                "1520020854138652\n" +
                "1520021802251940\n" +
                "1520022161025872\n" +
                "1520023673636922\n" +
                "1520025377238236\n" +
                "1520033210295473\n" +
                "1520034733462211\n" +
                "1520034895973501\n" +
                "1520035003983099\n" +
                "1520037389332967\n" +
                "1520037615794659\n" +
                "1520043906622356\n" +
                "1520050928025658\n" +
                "4511058330400\n" +
                "4511058333035\n" +
                "4511058344409\n" +
                "4511058345096\n" +
                "4511058347849\n" +
                "4511058349136\n" +
                "4511058354278\n" +
                "4511058923318\n" +
                "4511058967092\n" +
                "4511058986239\n" +
                "4511059471011\n" +
                "4511059473965\n" +
                "4511059475522\n" +
                "4511059479753\n" +
                "4511059481115\n" +
                "4511059505804\n" +
                "4511059513358\n" +
                "4511059514771\n" +
                "4511059520673\n" +
                "4511059525037\n" +
                "4511059534294\n" +
                "4511059543542\n" +
                "4511059549242\n" +
                "4511059559258\n" +
                "4511059632852\n" +
                "4511059940287\n" +
                "45000000000221\n" +
                "45000000000227\n" +
                "45000000000237\n" +
                "45000000000288\n" +
                "45000000003647\n" +
                "456946183197491\n" +
                "456946348347101\n" +
                "456946815224945\n" +
                "456950931672384\n" +
                "456963898363322\n" +
                "456966961253908\n" +
                "457171822333662\n" +
                "457352186319236\n" +
                "457352383452100\n" +
                "457354489516225\n" +
                "457465406837250\n" +
                "457488028291845\n" +
                "457489189064403\n" +
                "457489246474475\n" +
                "457602045989692\n" +
                "457641556071263\n" +
                "457666751253619\n" +
                "458051740126213\n" +
                "458300334689864\n" +
                "458327275491510\n" +
                "458344415252445\n" +
                "458393969643522\n" +
                "458463197155035\n" +
                "458869122159130\n" +
                "458957377130043\n" +
                "459069538586636\n" +
                "459092856556561\n" +
                "4510132940664609\n" +
                "4510884201067332\n" +
                "4513198966664202\n" +
                "4513263392486220\n" +
                "4513264976358965\n" +
                "4513423725785809\n" +
                "4513967310753236\n" +
                "4514056696065751\n" +
                "4514164564127820\n" +
                "4514576820694401\n" +
                "4514870474689676\n" +
                "4515004485562239\n" +
                "4515006846193267\n" +
                "4515122981227087\n" +
                "4515207248202219\n" +
                "4515432931880604\n" +
                "4515480083984641\n" +
                "4515481339916396\n" +
                "4515710271606567\n" +
                "4516119116105945\n" +
                "4520020650715560\n" +
                "4520020798570248\n" +
                "4520028377608230\n" +
                "4520029365752593\n" +
                "4520031398629745\n" +
                "4520034635930215\n" +
                "4520034750218533\n" +
                "4520035693287347\n" +
                "4520051098991846\n" +
                "4511058334675\n" +
                "4511058341278\n" +
                "4511058343680\n" +
                "4511058345279\n" +
                "4511058345854\n" +
                "4511058347014\n" +
                "4511058347203\n" +
                "4511058347557\n" +
                "4511058355238\n" +
                "4511059632144\n" +
                "4511059920722\n" +
                "45000000003749\n" +
                "45000000010404\n" +
                "457349908811627\n" +
                "457467747259018\n" +
                "458101076938224\n" +
                "458141917925604\n" +
                "458463400841662\n" +
                "458783091216608\n" +
                "459001124769603\n" +
                "459027958877979\n" +
                "459484929085841\n" +
                "4510200963363755\n" +
                "4512761420804565\n" +
                "4520021006182551\n" +
                "4520026878549956\n" +
                "4520029367846214\n" +
                "4520053565598856\n";
        String[] split = str.split("\n");
        for (String s : split) {
            String resblockId = HttpRequest.get("http://pre-mr.ke.com/delete/redis/query")
                    .form("resblockId", s)
                    .execute().body();
            System.out.println("resblockId: " + s + ", result: " + resblockId);
        }
    }

    public static void main(String[] args) throws IOException {
//        exportOriginResblock();
//         exportOfflineProjects(); // 取消注释以导出下线项目
//        offline();
        deleteCache();
    }
}
